OpenBSD PF

Table of Contents

PF 是 OpenBSD 自带的防火墙,并且默认启动。

启用 PF:

pfctl -e

禁用 PF:

pfctl -d

如果要禁止 PF 的开机后默认启动,停止服务即可:

rcctl disable pf

PF 启动后会从 /etc/pf.conf 加载配置,如果编辑了文件需要让 PF 立即生效,执行:

pfctl -f /etc/pf.conf

显示当前生效的规则:

pfctl -sr 或 pfctl -s rules

1. 规则语法

PF 加载规则时会忽略掉空行及注释行(“#”开头)。

列表:{},用来表示多项内容,列表会被 PF 展开成多条相同规则,比如多个IP地址:{192.168.1.102, 192.168.1.103}。

宏:类似程序语言中的变量定义,最终也会被 PF 展开,如:

freebsd_host = "192.168.1.103"
block on em0 proto icmp from $freebsd_host

指定 IP 时,直接使用点分 IP 格式即可,如 192.168.1.101;还可以指定 IP,如:192.168.1.0/24。

例,屏蔽 192.168.1.106 对主机 22 端口的访问:

block in on em0 proto tcp from 192.168.1.106 to port 22

注意:指定 port 时,必须指定 proto 为 tcpudp

例,只允许外部访问 80 端口:

block on em0 all
pass in on em0 proto tcp from any to port 80

以上示例,第一行首先阻断全部访问;第二行,只允许 80 端口的访问。若是没有第一句,规则将不会生效。

PF 也能屏蔽指定的协议,比如屏蔽 ICMP 协议:

block on em0 proto icmp

2. 更多资料